using System;
using System.Collections.ObjectModel;

namespace 地图哇哇哇.地图
{
    public class 人口 : NotifyPropertyChanged
    {
        private ulong _户数;
        private ulong _口数;
        private double _男性比率;

        public double 男性比率
        {
            get => _男性比率;
            set => _男性比率 = value;
        }

        public ulong 口数
        {
            get => _口数;
            set => _口数 = value;
        }

        private double _年出生率;
        private double _年死亡率;
        private double _童年率;
        private double _少年率; 
        private ulong _婴幼数量;
        private ulong _儿童数量;
        private ulong _少年数量;
        private ulong _青年数量;
        private ulong _中年数量;
        private ulong _老年数量;
        private ulong _暮年数量;
        private ushort _平均寿命;

        public ushort 平均寿命
        {
            get => _平均寿命;
            set => _平均寿命 = value;
        }

        public ulong 户数
        {
            get => _户数;
            set => _户数 = value;
        }

        public double 年出生率
        {
            get => _年出生率;
            set => _年出生率 = value;
        }

        public double 年死亡率
        {
            get => _年死亡率;
            set => _年死亡率 = value;
        }

        public double 童年率
        {
            get => _童年率;
            set => _童年率 = value;
        }

        public double 少年率
        {
            get => _少年率;
            set => _少年率 = value;
        }

        public ulong 男性数量 => (ulong)Math.Floor(男性比率 *口数);

        public ulong 女性数量 => 口数 - 男性数量;

        public ulong 婴幼数量
        {
            get => _婴幼数量;
            set => _婴幼数量 = value;
        }

        public ulong 儿童数量
        {
            get => _儿童数量;
            set => _儿童数量 = value;
        }

        public ulong 少年数量
        {
            get => _少年数量;
            set => _少年数量 = value;
        }

        public ulong 青年数量
        {
            get => _青年数量;
            set => _青年数量 = value;
        }

        public ulong 中年数量
        {
            get => _中年数量;
            set => _中年数量 = value;
        }

        public ulong 老年数量
        {
            get => _老年数量;
            set => _老年数量 = value;
        }

        public ulong 暮年数量
        {
            get => _暮年数量;
            set => _暮年数量 = value;
        }
    }

    public class 生灵 : NotifyPropertyChanged
    {
        private 人口 _人口;
        private ulong _禽数;
        private ulong _兽数;
        private ulong _其它生灵数;

        public 人口 人口
        {
            get => _人口;
            set => _人口 = value;
        }

        public ulong 禽数
        {
            get => _禽数;
            set => _禽数 = value;
        }

        public ulong 兽数
        {
            get => _兽数;
            set => _兽数 = value;
        }

        public ulong 其它生灵数
        {
            get => _其它生灵数;
            set => _其它生灵数 = value;
        }
    }

    public class 基础属性 : NotifyPropertyChanged
    {
        private string _名称;
        private 生灵 _生灵;
        private string _说明;
      

        

        public string 名称
        {
            get => _名称;
            set => _名称 = value;
        }

        public 生灵 生灵
        {
            get => _生灵;
            set => _生灵 = value;
        }

        public string 说明
        {
            get => _说明;
            set => _说明 = value;
        }
    }

    public class 帝国 : 基础属性
    {
        private ObservableCollection<王国> _王国们;
        private ObservableCollection<府> _府们;

        public ObservableCollection<王国> 王国们
        {
            get => _王国们;
            set => Set(ref _王国们, value);
        }

        public ObservableCollection<府> 府们
        {
            get => _府们;
            set => Set(ref _府们, value);
        }
    }

    public class 王国 : 基础属性
    {
        private ObservableCollection<州> _州们;

        public ObservableCollection<州> 州们
        {
            get => _州们;
            set => Set(ref _州们, value);
        }
    }

    public class 府 : 基础属性
    {
        private ObservableCollection<州> _州们;

        public ObservableCollection<州> 州们
        {
            get => _州们;
            set => Set(ref _州们, value);
        }
    }

    public class 州 : 基础属性
    {
        private ObservableCollection<郡> _郡们;

        public ObservableCollection<郡> 郡们
        {
            get => _郡们;
            set => Set(ref _郡们, value);
        }
    }

    public class 郡 : 基础属性
    {
        private ObservableCollection<县> _县们;

        public ObservableCollection<县> 县们
        {
            get => _县们;
            set => Set(ref _县们, value);
        }
    }

    public class 县 : 基础属性
    {
        private ObservableCollection<镇> _镇们;
        private ObservableCollection<乡> _乡们;

        public ObservableCollection<镇> 镇们
        {
            get => _镇们;
            set => Set(ref _镇们, value);
        }

        public ObservableCollection<乡> 乡们
        {
            get => _乡们;
            set => Set(ref _乡们, value);
        }
    }

    public class 镇 : 基础属性
    {
        private ObservableCollection<村> _村们;

        public ObservableCollection<村> 村们
        {
            get => _村们;
            set => Set(ref _村们, value);
        }
    }

    public class 乡 : 基础属性
    {
        private ObservableCollection<村> _村们;

        public ObservableCollection<村> 村们
        {
            get => _村们;
            set => Set(ref _村们, value);
        }
    }

    public class 村 : 基础属性
    {
    }

    public class 生成国家测试的结果:NotifyPropertyChanged
    {
        private long _生成耗时;

        public long 生成耗时
        {
            get => _生成耗时;
            set => _生成耗时 = value;
        }

        public ObservableCollection<帝国> 所有帝国
        {
            get => _所有帝国;
            set => _所有帝国 = value;
        }

        public ObservableCollection<王国> 所有王国
        {
            get => _所有王国;
            set => _所有王国 = value;
        }

        public ObservableCollection<府> 所有府
        {
            get => _所有府;
            set => _所有府 = value;
        }

        public ObservableCollection<州> 所有州
        {
            get => _所有州;
            set => _所有州 = value;
        }

        public ObservableCollection<郡> 所有郡
        {
            get => _所有郡;
            set => _所有郡 = value;
        }

        public ObservableCollection<县> 所有县
        {
            get => _所有县;
            set => _所有县 = value;
        }

        public ObservableCollection<镇> 所有镇
        {
            get => _所有镇;
            set => _所有镇 = value;
        }

        public ObservableCollection<乡> 所有乡
        {
            get => _所有乡;
            set => _所有乡 = value;
        }

        public ObservableCollection<村> 所有村
        {
            get => _所有村;
            set => _所有村 = value;
        }

        private ObservableCollection<帝国> _所有帝国;
        private ObservableCollection<王国> _所有王国;
        private ObservableCollection<府> _所有府;
        private ObservableCollection<州> _所有州;
        private ObservableCollection<郡> _所有郡;
        private ObservableCollection<县> _所有县;
        private ObservableCollection<镇> _所有镇;
        private ObservableCollection<乡> _所有乡;
        private ObservableCollection<村> _所有村;
    }
}